Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

Îåêßíçóå áðü ôï ìÝëïò angarato_surion. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 15-01-2006, 21:54. Υπάρχουν 21 απαντήσεις.
Σελίδα 1 από 2 (22 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  31-12-2005, 21:08 8300

    Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string με κώδικα c#;

     


    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  02-01-2006, 14:52 8318 σε απάντηση της 8300

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    Γενικά υπάρχουν 2 τρόποι να χειριστείς XML.

    Ο πρώτος και πιο πολύπλοκος είναι να θεωρείς την XML string και να κάνεις αναζητήσεις κάθε φορά που θες να βρεις μια τιμή ή ένα node με Regular Expressions.

    Ο άλλος είναι να χρησιμοποιήσεις τα έτοιμα objects που έχει το .NET Framework να τους φορτώνεις την XML και με τις έτοιμες μεθόδους που έχουν να κάνεις την προσθήκη, διαγραφή, τροποποίηση, αναζήτηση των nodes αλλά και των properties τους.

    Θα σου πρότεινα τον δεύτερο τρόπο, μιας και είναι αυτός που θα γράψεις τον λιγότερο κώδικα. Θα πρέπει να κάνεις ένα reference στο System.XML namespace και να χρησιμοποιήσεις το XmlDocument Class. Άμα δεις τα members αυτού του class θα καταλάβεις πως μπορείς την μέθοδο Load() για να φορτώσεις XML από ένα αρχείο στο object ή την μέθοδο LoadXML() για να φορτώσεις XML από ένα string. Έχει έτοιμες μεθόδους για την προσθήκη nodes (AppendChild()), για την διαγραφή τους (RemoveChild(), RemoveAll()) ή και για την διόρθωσή τους (ReplaceChild()). Οι περισσότερες από αυτές περιέχουν και παραδείγματα κώδικα, οπότε θα είναι δύσκολο να μην τα καταφέρεις.

    Σε σχέση με τα υπόλοιπα ερωτήματά σου, ίσως θα έπρεπε να κοιτάξεις και το XmlDataDocument Class, που είναι μια κλάση που προέρχεται από το XMLDocument class, έχει όλες τις μεθόδους του, αλλά μπορεί να συνδιαστεί με ένα Dataset. Όταν γίνει αυτό, όλες οι αλλαγές που γίνονται στο XML, είτε μέσω Dataset είτε μέσω του XML DOM θα είναι διαθέσιμο στην άλλη μεριά.

    Αυτό είναι χρήσιμο όταν έχεις XML data που θέλεις να τα παρουσιάσεις στο χρήστη και να τον αφήσεις να κάνει αλλαγές, φορτώνεις τα XML data στο XmlDataDocument class και το συνδιάζεις με το Dataset. Στη συνέχεια μπορείς να το συνδέσεις με ένα control grid και να αφήσεις το χρήστη να κάνει τις αλλαγές που θέλει, και όταν τελειώσει, εσύ να πάρεις την XML από το αντικείμενο τύπου XmlDataDocument που έχεις συνδέσει και να την αποθηκεύσεις με όλες τις αλλαγές, χωρίς να έχεις γράψει καθόλου κώδικα που να συγχρονίζει όλα τα objects που συμμετάσχουν στην διαδικασία.

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  02-01-2006, 15:26 8322 σε απάντηση της 8318

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    την διαδιακσια διαχειρησης του xml την ξερω θελω να ψαχνω για μια συγκεκριμενη τιμη σε καποιο child node εσυ μου λες επιηκως ασχετα!!
    θελω να κανω βαση δεδομενων με χρηση της xml. δεν λεει σε καποια εντολη κατι του στυλ search ή κατι που να το υποδηλωνει:P
    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  02-01-2006, 16:43 8323 σε απάντηση της 8322

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    Πιστεύω οτι για το είδος της ερώτησης η οποία ετέθη ("Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string με κώδικα c#"), ο Γιώργος υπέθεσε (και καλά έκανε) οτι ζητούσες αυτά για τα οποία σου έγραψε.

    Θα ήταν καλό να είμαστε λεπτομερείς στην περιγραφή μας όταν θέτουμε μια ερώτηση, γιατί το να γράψει κανείς μια σελίδα απάντηση δεν είναι λίγο πράγμα, και είναι κρίμα να μην απαντά στην ερώτηση.

    Τωρα, όσον αφορά την ουσία της ερώτησης, δεν είναι συγκεκριμένη εντολή αυτό που θα πάρεις ως απάντηση. Καταρχήν θα πρέπει να μας πεις αν οι τιμές που χρειάζεται να αναζητήσεις βρίσκονται σε attributes, elements ή CDATA elements. Κατά δεύτερον, τι σημαίνει child node? Καταλαβαίνω οτι μπορεί να εννοείς child node οποιουδήποτε άλλου node ή child node του document element. Στην πρώτη περίπτωση θα έχεις αναζήτηση με πολλαπλό και μη καθορισμένο αριθμό επιπέδων, στη δεύτερη περίπτωση θα έχεις αναζήτηση σε ένα και μόνο επίπεδο.

    Η απάντηση του Γιώργου περί θεώρησης του XML ως string (τροπος Α) ή της χρήσης του System.XML (τρόπος Β) είναι κατά βάση σωστή. Θα πρότεινα προς το παρόν να αγνοήσεις τα περί Datasets και να εξετάσεις αναλυτικά το System.XML namespace.

    Δώσε μας αναλυτικότερη περιγραφή του θέματος, αν το θέλεις, ωστε να μπορέσουμε να απαντήσουμε και με σχετικό κώδικα. Ισως θα ήταν καλό, αν έχεις ήδη δημιουργήσει κάτι στο οποίο αντιμετωπίζεις το συγκεκριμένο θέμα, να μας το περιγράψεις λίγο.
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  02-01-2006, 18:47 8325 σε απάντηση της 8323

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    Η μορφή όλων των βάσεων δεδομένων που θα φτιάχνονται με αυτό το dll θα είναι:

    <PYNAKAS>
     <EGGRAFI>
      <ONOMAKELIOY1>timi1</ONOMAKELIOY1>
      ...
      <ONOMAKELIOYN>timin</ONOMAKELIOYN>
     </EGGRAFI>
    </PYNAKAS>

    Τώρα ένα παράδειγμα πίνακα, θα πάρω μια πολύ μικρή βάση δεδομένων για ταξινόμηση βιβλίων.

    <PYNAKAS>
     <EGGRAFI>
      <Τίτλος>Αρχοντας των Δαχτυλιδιών: Η επιστροφη του Βασσιλια</ΤΊΤΛΟΣ>
      <συγγραφέας>Τόλκιν</ΣΥΓΓΡΑΦΈΑΣ>
      <Είδος>Επικο Φαντασίας</ΕΊΔΟΣ>
     </EGGRAFI>
     ... (ομοίως και αλλες εγγραφές με βιβλία)
    </PYNAKAS>

    Οι λέξεις <EGGRAFI>, </EGGRAFI> όπως λεει και η ονομασια τους υποδηλώνουν μια εγγραφή όμοια και η λεξη pynakas.

    Θέλω να κάνω μια συνάρτηση η οποία θα παίρνει σαν όρισμα το όνομα του κελιού (π.χ. Τίτλος αυτό μέσα στον κώδικα του εκτελεσίμου) και ένα άλλο (π.χ. Άρχοντας των δαχτυλιδιών) και να επιστρέφει την εγγραφή η οποία τα επιστρέφει

    Stick out tongue [:P]

    Δεν ξέρω πως γίνεται αυτό


     


    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 12:59 8328 σε απάντηση της 8325

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    Δυστυχώς επειδή ξέρω μόνο VB.NET θα σε βοηθήσω με ανάλογο κώδικα

    Μπορείς να φορτώσεις το xml σου σε ένα dataset και από κει και πέρα να κάνεις select σε αυτό. Δηλαδή μία function θα μπορούσε να ήταν η εξής:

    Private Function FindEggrafi (ByVal qField as String, ByVal qStr as String) as Datarow

    Dim dtst as New Dataset
    Dim rows() as Datarow
    dtst.ReadXML("filename.xml")
    rows = dtst.tables("PYNAKAS").Select("[" & qField & "] = '" & qstr & "'")
    If Not UBound(rows) = -1 Then Return rows(0) Else Return Nothing

    End Function

    Όπως καταλαβαίνεις, κάθε φορά που καλείς τη function θα δημιουργεί και θα γεμίζει ένα dataset (χρονοβόρο). Το καλύτερο είναι να το γεμίζεις μια και καλή στην αρχή και να είναι διαθέσιμο σε όλη την κλάση


    Panos
  •  03-01-2006, 13:13 8329 σε απάντηση της 8328

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    το ubound τι ειναι γιατι δεν την εχω ακουστα αυτη την συναρτηση; ουτε σην vb6 δεν την εχω δει ποτε μου.
    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 13:32 8330 σε απάντηση της 8329

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    μου βγαζει σφαλμα στο tdtrRow = tdtsData.Tables(hydrobase.pyn).Select("[" + onomakel + "] =" + "" + timi + "");

    το Error 1 'System.Data.DataSet.Tables' is a 'property' but is used like a 'method' D:\Τα_Προγραμματά_μου\.Net\Hydrobase\Hydrobase\hydrobaseADO.cs 71 40 Hydrobase



    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 13:38 8331 σε απάντηση της 8330

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    το γραφω σε .net framework2
    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 13:45 8332 σε απάντηση της 8329

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    Είναι η εντολή με την οποία βρίσκεις το άνω όριο ενός πίνακα στη VB6. Αν έχεις δουλέψει με loop σε πίνακες, δεν μπορεί να μην την έχεις συναντήσει. Στην VB.ΝΕΤ πάντως είναι περιττή γιατί υπάρχουν η μέθοδος Length που χρησιμοποιείται από όλα τα collections.

    Όσον αφορά την αναζήτηση, πραγματικά θα πρέπει να είσαι σαφής στις ερωτήσεις σου. Ο μόνος λόγος που ο Γιώργος κατάφερε να μαντέψει τί ζητάς είναι γιατί έχει υπόψη τις ερωτήσεις που έχεις κάνει στο παρελθόν καθώς και αυτές που κάνεις στο coder.gr. Αν δεν γινόταν αυτό, δεν υπήρχε περίπτωση να σου απαντήσει κανείς. Childnode? Σε τί? Σε XML? Σε κάποιο Treeview?

    Τώρα, αν θέλεις να κάνεις κάποια μορφή query σε XML, μπορείς να χρησιμοποιήσεις XPath και μία από τις μεθόδους XPathNavigator.Select, XPathNavigator.SelectAncestors, XPathNavigator.SelectChildren, XPathNavigator.SelectDescendants.  Το documentation καθεμίας από αυτές τις μεθόδους δείχνει πως να διαβάσεις ένα αρχείο ή string xml και να κάνει κάποια αναζήτηση, τόσο σε C# όσο και σε VB. Αντιγράφω απλά τον κώδικα για την SelectDescendants:



    Imports System
    Imports System.IO
    Imports System.Xml.XPath

    public class Sample

      public shared sub Main()

        Dim doc as XPathDocument = new XPathDocument("books.xml")
        Dim nav as XPathNavigator = doc.CreateNavigator()
     
        ' Move to the first book node.
        Dim ni as XPathNodeIterator = nav.SelectDescendants("book", "", false)
        ni.MoveNext()
        Dim nav2 as XPathNavigator = ni.Current

        ' Display the content of each element node.
        Dim ni2 as XPathNodeIterator = nav2.SelectDescendants(XPathNodeType.Text, false)
        while (ni2.MoveNext())
          Console.WriteLine(ni2.Current.Value)
        end while

      end sub
    end class


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-01-2006, 13:49 8333 σε απάντηση της 8330

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

     angarato_surion wrote:
    μου βγαζει σφαλμα στο tdtrRow = tdtsData.Tables(hydrobase.pyn).Select("[" + onomakel + "] =" + "" + timi + "");

    το Error 1 'System.Data.DataSet.Tables' is a 'property' but is used like a 'method' D:\Τα_Προγραμματά_μου\.Net\Hydrobase\Hydrobase\hydrobaseADO.cs 71 40 Hydrobase


    Έβαλες () αντί για []. Αν αυτός είναι ο κώδικας σου, το επόμενο λάθος που θα σου βγάλει είναι ότι δεν υπάρχει η κλάση hydrobase.pyn, γιατί δεν έχεις βάλει ""


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-01-2006, 13:58 8334 σε απάντηση της 8331

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    το εφτιαξα δε ξερω καταποσο δουλέυει.


    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 14:01 8335 σε απάντηση της 8334

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    σταθερά ειναι:P οχι κλάση
    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 14:02 8336 σε απάντηση της 8335

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

    απλως παντα το πανω μερος ενως πινακα σε γλωσσες προγραμματισμου συνιθως ειναι το 0 οποτε αρχιζω απο το 0 και παω μεχρι το τελος
    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
  •  03-01-2006, 14:07 8337 σε απάντηση της 8332

    Απ: Πως αναζητούμε την τιμή κάποιου childnode για κάποιο string;

     pkanavos wrote:

    Είναι η εντολή με την οποία βρίσκεις το άνω όριο ενός πίνακα στη VB6. Αν έχεις δουλέψει με loop σε πίνακες, δεν μπορεί να μην την έχεις συναντήσει. Στην VB.ΝΕΤ πάντως είναι περιττή γιατί υπάρχουν η μέθοδος Length που χρησιμοποιείται από όλα τα collections.

    Όσον αφορά την αναζήτηση, πραγματικά θα πρέπει να είσαι σαφής στις ερωτήσεις σου. Ο μόνος λόγος που ο Γιώργος κατάφερε να μαντέψει τί ζητάς είναι γιατί έχει υπόψη τις ερωτήσεις που έχεις κάνει στο παρελθόν καθώς και αυτές που κάνεις στο coder.gr. Αν δεν γινόταν αυτό, δεν υπήρχε περίπτωση να σου απαντήσει κανείς. Childnode? Σε τί? Σε XML? Σε κάποιο Treeview?

    Τώρα, αν θέλεις να κάνεις κάποια μορφή query σε XML, μπορείς να χρησιμοποιήσεις XPath και μία από τις μεθόδους XPathNavigator.Select, XPathNavigator.SelectAncestors, XPathNavigator.SelectChildren, XPathNavigator.SelectDescendants.  Το documentation καθεμίας από αυτές τις μεθόδους δείχνει πως να διαβάσεις ένα αρχείο ή string xml και να κάνει κάποια αναζήτηση, τόσο σε C# όσο και σε VB. Αντιγράφω απλά τον κώδικα για την SelectDescendants:



    Imports System
    Imports System.IO
    Imports System.Xml.XPath

    public class Sample

      public shared sub Main()

        Dim doc as XPathDocument = new XPathDocument("books.xml")
        Dim nav as XPathNavigator = doc.CreateNavigator()
     
        ' Move to the first book node.
        Dim ni as XPathNodeIterator = nav.SelectDescendants("book", "", false)
        ni.MoveNext()
        Dim nav2 as XPathNavigator = ni.Current

        ' Display the content of each element node.
        Dim ni2 as XPathNodeIterator = nav2.SelectDescendants(XPathNodeType.Text, false)
        while (ni2.MoveNext())
          Console.WriteLine(ni2.Current.Value)
        end while

      end sub
    end class


    και αυτο πως το επιστρεφεις κάπου; π.χ. σε κάποιο άλλο αρχείο;

    Υδροβάση(Hydrobase)
    profiles :
    codeplex
    sourceforge
    google code

    Υλοποιώ εφαρμογές υπό πληρωμή απλώς επικοινωνήστε μαζί μου
Σελίδα 1 από 2 (22 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems